From c3fb6ca747c4f49c3e5a21c287baf37f1ab4676d Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 1 Mar 2020 17:32:40 +0100 Subject: [PATCH] colorswatch: Switch to dragged color during dnd This is really simple to implement now, so do it. --- gtk/gtkcolorswatch.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c index ae424ad572..63dad35bd9 100644 --- a/gtk/gtkcolorswatch.c +++ b/gtk/gtkcolorswatch.c @@ -89,25 +89,35 @@ swatch_snapshot (GtkWidget *widget, GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch); const int width = gtk_widget_get_width (widget); const int height = gtk_widget_get_height (widget); + const GdkRGBA *color; + + color = &priv->color; + if (priv->dest) + { + const GValue *value = gtk_drop_target_get_value (priv->dest); + + if (value) + color = g_value_get_boxed (value); + } if (priv->has_color) { - if (priv->use_alpha && !gdk_rgba_is_opaque (&priv->color)) + if (priv->use_alpha && !gdk_rgba_is_opaque (color)) { _gtk_color_chooser_snapshot_checkered_pattern (snapshot, width, height); gtk_snapshot_append_color (snapshot, - &priv->color, + color, &GRAPHENE_RECT_INIT (0, 0, width, height)); } else { - GdkRGBA color = priv->color; + GdkRGBA opaque = *color; - color.alpha = 1.0; + opaque.alpha = 1.0; gtk_snapshot_append_color (snapshot, - &color, + &opaque, &GRAPHENE_RECT_INIT (0, 0, width, height)); } } @@ -654,7 +664,9 @@ gtk_color_swatch_set_can_drop (GtkColorSwatch *swatch, if (can_drop && !priv->dest) { priv->dest = gtk_drop_target_new (GDK_TYPE_RGBA, GDK_ACTION_COPY); + gtk_drop_target_set_preload (priv->dest, TRUE); g_signal_connect (priv->dest, "drop", G_CALLBACK (swatch_drag_drop), swatch); + g_signal_connect_swapped (priv->dest, "notify::value", G_CALLBACK (gtk_widget_queue_draw), swatch); gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (priv->dest)); } if (!can_drop && priv->dest) -- 2.30.2